Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


Display.h fe594b20486f57238534f8f2caacf38f8cb25e43 (fe594b20) Text, 42.42 KB

T8b949e// Copyright (C) 2024, Mark Qvist

T8b949e// This program is free software: you can redistribute it and/or modify
T8b949e// it under the terms of the GNU General Public License as published by
T8b949e// the Free Software Foundation, either version 3 of the License, or
T8b949e// (at your option) any later version.

T8b949e// This program is distributed in the hope that it will be useful,
T8b949e// but WITHOUT ANY WARRANTY; without even the implied warranty of
T8b949e// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
T8b949e// GNU General Public License for more details.

T8b949e// You should have received a copy of the GNU General Public License
T8b949e// along with this program. If not, see <https://www.gnu.org/licenses/>.

Tff7b72#Tff7b72include T8b949e"Graphics.h"
Tff7b72#Tff7b72include T8b949e<Adafruit_GFX.h>

Tff7b72#Tff7b72if BOARD_MODEL != BOARD_TECHO
Tff7b72#Tff7b72if BOARD_MODEL == BOARD_TDECK
Tff7b72#Tff7b72include T8b949e<Adafruit_ST7789.h>
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HELTEC_T114
Tff7b72#Tff7b72include T8b949e"ST7789.h"
Tff7b72#Tff7b72define COLOR565(r, g, b) (((r & 0xF8) << 8) | ((g & 0xFC) << 3) | ((b & 0xF8) >> 3))
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TBEAM_S_V1
Tff7b72#Tff7b72include T8b949e<Adafruit_SH110X.h>
Tff7b72#Tff7b72else
Tff7b72#Tff7b72include T8b949e<Wire.h>
Tff7b72#Tff7b72include T8b949e<Adafruit_SSD1306.h>
Tff7b72#Tff7b72endif

Tff7b72#Tff7b72else
Tffa657void Tb4b4b4(Tff7b72*Te6edf3display_callbackTb4b4b4)Tb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffdisplay_add_callbackTb4b4b4(Tffa657void Tb4b4b4(Tff7b72*Te6edf3callbackTb4b4b4)Tb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{ Te6edf3display_callback Tff7b72= Te6edf3callbackTb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffbusyCallbackTb4b4b4(Tff7b72const Tffa657voidTff7b72* Te6edf3pTb4b4b4) Tb4b4b4{ Te6edf3display_callbackTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72define SSD1306_BLACK GxEPD_BLACK
Tff7b72#Tff7b72define SSD1306_WHITE GxEPD_WHITE
Tff7b72#Tff7b72include T8b949e<GxEPD2_BW.h>
Tff7b72#Tff7b72include T8b949e<SPI.h>
Tff7b72#Tff7b72endif

Tff7b72#Tff7b72include T8b949e"Fonts/Org_01.h"
Tff7b72#Tff7b72define DISP_W 128
Tff7b72#Tff7b72define DISP_H 64

Tff7b72#Tff7b72if BOARD_MODEL == BOARD_RNODE_NG_20 || BOARD_MODEL == BOARD_LORA32_V2_0
Tff7b72#Tff7b72define DISP_RST -1
Tff7b72#Tff7b72define DISP_ADDR 0x3C
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TBEAM
Tff7b72#Tff7b72define DISP_RST 13
Tff7b72#Tff7b72define DISP_ADDR 0x3C
Tff7b72#Tff7b72define DISP_CUSTOM_ADDR true
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HELTEC32_V2 || BOARD_MODEL == BOARD_LORA32_V1_0
Tff7b72#Tff7b72define DISP_RST 16
Tff7b72#Tff7b72define DISP_ADDR 0x3C
Tff7b72#Tff7b72define SCL_OLED 15
Tff7b72#Tff7b72define SDA_OLED 4
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HELTEC32_V3
Tff7b72#Tff7b72define DISP_RST 21
Tff7b72#Tff7b72define DISP_ADDR 0x3C
Tff7b72#Tff7b72define SCL_OLED 18
Tff7b72#Tff7b72define SDA_OLED 17
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HELTEC32_V4
Tff7b72#Tff7b72define DISP_RST 21
Tff7b72#Tff7b72define DISP_ADDR 0x3C
Tff7b72#Tff7b72define SCL_OLED 18
Tff7b72#Tff7b72define SDA_OLED 17
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_RAK4631
T8b949e// RAK1921/SSD1306
Tff7b72#Tff7b72define DISP_RST -1
Tff7b72#Tff7b72define DISP_ADDR 0x3C
Tff7b72#Tff7b72define SCL_OLED 14
Tff7b72#Tff7b72define SDA_OLED 13
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_RNODE_NG_21
Tff7b72#Tff7b72define DISP_RST -1
Tff7b72#Tff7b72define DISP_ADDR 0x3C
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_T3S3
Tff7b72#Tff7b72define DISP_RST 21
Tff7b72#Tff7b72define DISP_ADDR 0x3C
Tff7b72#Tff7b72define SCL_OLED 17
Tff7b72#Tff7b72define SDA_OLED 18
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TECHO
Te6edf3SPIClass Te6edf3displaySPI Tff7b72= Te6edf3SPIClassTb4b4b4(Te6edf3NRF_SPIM0Tb4b4b4, Te6edf3pin_disp_misoTb4b4b4, Te6edf3pin_disp_sckTb4b4b4, Te6edf3pin_disp_mosiTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72define DISP_W 128
Tff7b72#Tff7b72define DISP_H 64
Tff7b72#Tff7b72define DISP_ADDR -1
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TBEAM_S_V1
Tff7b72#Tff7b72define DISP_RST -1
Tff7b72#Tff7b72define DISP_ADDR 0x3C
Tff7b72#Tff7b72define SCL_OLED 18
Tff7b72#Tff7b72define SDA_OLED 17
Tff7b72#Tff7b72define DISP_CUSTOM_ADDR false
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_XIAO_S3
Tff7b72#Tff7b72define DISP_RST -1
Tff7b72#Tff7b72define DISP_ADDR 0x3C
Tff7b72#Tff7b72define SCL_OLED 6
Tff7b72#Tff7b72define SDA_OLED 5
Tff7b72#Tff7b72define DISP_CUSTOM_ADDR true
Tff7b72#Tff7b72else
Tff7b72#Tff7b72define DISP_RST -1
Tff7b72#Tff7b72define DISP_ADDR 0x3C
Tff7b72#Tff7b72define DISP_CUSTOM_ADDR true
Tff7b72#Tff7b72endif

Tff7b72#Tff7b72define SMALL_FONT &Org_01

Tff7b72#Tff7b72if BOARD_MODEL == BOARD_TDECK
Te6edf3Adafruit_ST7789 Te6edf3display Tff7b72= Te6edf3Adafruit_ST7789Tb4b4b4(Te6edf3DISPLAY_CSTb4b4b4, Te6edf3DISPLAY_DCTb4b4b4, T79c0ff-1Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72define SSD1306_WHITE ST77XX_WHITE
Tff7b72#Tff7b72define SSD1306_BLACK ST77XX_BLACK
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HELTEC_T114
Te6edf3ST7789Spi Td2a8ffdisplayTb4b4b4(Tff7b72&Te6edf3SPI1Tb4b4b4, Te6edf3DISPLAY_RSTTb4b4b4, Te6edf3DISPLAY_DCTb4b4b4, Te6edf3DISPLAY_CSTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72define SSD1306_WHITE ST77XX_WHITE
Tff7b72#Tff7b72define SSD1306_BLACK ST77XX_BLACK
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TBEAM_S_V1
Te6edf3Adafruit_SH1106G Te6edf3display Tff7b72= Te6edf3Adafruit_SH1106GTb4b4b4(T79c0ff128Tb4b4b4, T79c0ff64Tb4b4b4, Tff7b72&Te6edf3WireTb4b4b4, T79c0ff-1Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72define SSD1306_WHITE SH110X_WHITE
Tff7b72#Tff7b72define SSD1306_BLACK SH110X_BLACK
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TECHO
Te6edf3GxEPD2_BWTff7b72<Te6edf3GxEPD2_154_D67Tb4b4b4, Te6edf3GxEPD2_154_D67Tff7b72:Tff7b72:Te6edf3HEIGHTTff7b72> Te6edf3displayTb4b4b4(Te6edf3GxEPD2_154_D67Tb4b4b4(Te6edf3pin_disp_csTb4b4b4, Te6edf3pin_disp_dcTb4b4b4, Te6edf3pin_disp_resetTb4b4b4, Te6edf3pin_disp_busyTb4b4b4)Tb4b4b4)Tb4b4b4;
Tffa657uint32_t Te6edf3last_epd_refresh Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint32_t Te6edf3last_epd_full_refresh Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72#Tff7b72define REFRESH_PERIOD 300000
Tff7b72#Tff7b72else
Te6edf3Adafruit_SSD1306 Td2a8ffdisplayTb4b4b4(Te6edf3DISP_WTb4b4b4, Te6edf3DISP_HTb4b4b4, Tff7b72&Te6edf3WireTb4b4b4, Te6edf3DISP_RSTTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif

Tffa657float Te6edf3disp_target_fps Tff7b72= T79c0ff7Tb4b4b4;
Tffa657float Te6edf3epd_update_fps Tff7b72= T79c0ff0.5Tb4b4b4;

Tff7b72#Tff7b72define DISP_MODE_UNKNOWN 0x00
Tff7b72#Tff7b72define DISP_MODE_LANDSCAPE 0x01
Tff7b72#Tff7b72define DISP_MODE_PORTRAIT 0x02
Tff7b72#Tff7b72define DISP_PIN_SIZE 6
Tff7b72#Tff7b72define DISPLAY_BLANKING_TIMEOUT 15*1000
Tffa657uint8_t Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_UNKNOWNTb4b4b4;
Tffa657uint8_t Te6edf3disp_ext_fb Tff7b72= Tffa657falseTb4b4b4;
Tffa657unsigned Tffa657char Te6edf3fbTb4b4b4[T79c0ff512Tb4b4b4]Tb4b4b4;
Tffa657uint32_t Te6edf3last_disp_update Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint32_t Te6edf3last_unblank_event Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint32_t Te6edf3display_blanking_timeout Tff7b72= Te6edf3DISPLAY_BLANKING_TIMEOUTTb4b4b4;
Tffa657uint8_t Te6edf3display_unblank_intensity Tff7b72= Te6edf3display_intensityTb4b4b4;
Tffa657bool Te6edf3display_blanked Tff7b72= Tffa657falseTb4b4b4;
Tffa657bool Te6edf3display_tx Tff7b72= Tffa657falseTb4b4b4;
Tffa657bool Te6edf3recondition_display Tff7b72= Tffa657falseTb4b4b4;
Tffa657int Te6edf3disp_update_interval Tff7b72= T79c0ff1000Tff7b72/Te6edf3disp_target_fpsTb4b4b4;
Tffa657int Te6edf3epd_update_interval Tff7b72= T79c0ff1000Tff7b72/Te6edf3disp_target_fpsTb4b4b4;
Tffa657uint32_t Te6edf3last_page_flip Tff7b72= T79c0ff0Tb4b4b4;
Tffa657int Te6edf3page_interval Tff7b72= T79c0ff4000Tb4b4b4;
Tffa657bool Td2a8ffdevice_signatures_okTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657bool Td2a8ffdevice_firmware_okTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72#Tff7b72define WATERFALL_SIZE 46
Tffa657int Te6edf3waterfallTb4b4b4[Te6edf3WATERFALL_SIZETb4b4b4]Tb4b4b4;
Tffa657int Te6edf3waterfall_metaTb4b4b4[Te6edf3WATERFALL_SIZETb4b4b4]Tb4b4b4;
Tffa657int Te6edf3waterfall_head Tff7b72= T79c0ff0Tb4b4b4;

Tffa657int Te6edf3p_ad_x Tff7b72= T79c0ff0Tb4b4b4;
Tffa657int Te6edf3p_ad_y Tff7b72= T79c0ff0Tb4b4b4;
Tffa657int Te6edf3p_as_x Tff7b72= T79c0ff0Tb4b4b4;
Tffa657int Te6edf3p_as_y Tff7b72= T79c0ff0Tb4b4b4;

Te6edf3GFXcanvas1 Td2a8ffstat_areaTb4b4b4(T79c0ff64Tb4b4b4, T79c0ff64Tb4b4b4)Tb4b4b4;
Te6edf3GFXcanvas1 Td2a8ffdisp_areaTb4b4b4(T79c0ff64Tb4b4b4, T79c0ff64Tb4b4b4)Tb4b4b4;

Tff7b72static Tff7b72const Tffa657uint8_t Te6edf3one_countsTb4b4b4[T79c0ff256Tb4b4b4] Tff7b72= Tb4b4b4{
T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4,
T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4,
T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff3Tb4b4b4,
T79c0ff2Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4,
T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4,
T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4,
T79c0ff1Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4,
T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff2Tb4b4b4,
T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0
Tb4b4b4}Tb4b4b4;

Tffa657void Td2a8fffillRectTb4b4b4(Tffa657int16_t Te6edf3xTb4b4b4, Tffa657int16_t Te6edf3yTb4b4b4, Tffa657int16_t Te6edf3widthTb4b4b4, Tffa657int16_t Te6edf3heightTb4b4b4, Tffa657uint16_t Te6edf3colourTb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffupdate_area_positionsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if BOARD_MODEL == BOARD_HELTEC_T114
Tff7b72if Tb4b4b4(Te6edf3disp_mode Tff7b72=Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4) Tb4b4b4{
Te6edf3p_ad_x Tff7b72= T79c0ff16Tb4b4b4;
Te6edf3p_ad_y Tff7b72= T79c0ff64Tb4b4b4;
Te6edf3p_as_x Tff7b72= T79c0ff16Tb4b4b4;
Te6edf3p_as_y Tff7b72= Te6edf3p_ad_yTff7b72+T79c0ff126Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3disp_mode Tff7b72=Tff7b72= Te6edf3DISP_MODE_LANDSCAPETb4b4b4) Tb4b4b4{
Te6edf3p_ad_x Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3p_ad_y Tff7b72= T79c0ff96Tb4b4b4;
Te6edf3p_as_x Tff7b72= T79c0ff126Tb4b4b4;
Te6edf3p_as_y Tff7b72= Te6edf3p_ad_yTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TECHO
Tff7b72if Tb4b4b4(Te6edf3disp_mode Tff7b72=Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4) Tb4b4b4{
Te6edf3p_ad_x Tff7b72= T79c0ff61Tb4b4b4;
Te6edf3p_ad_y Tff7b72= T79c0ff36Tb4b4b4;
Te6edf3p_as_x Tff7b72= T79c0ff64Tb4b4b4;
Te6edf3p_as_y Tff7b72= T79c0ff64Tff7b72+T79c0ff36Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3disp_mode Tff7b72=Tff7b72= Te6edf3DISP_MODE_LANDSCAPETb4b4b4) Tb4b4b4{
Te6edf3p_ad_x Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3p_ad_y Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3p_as_x Tff7b72= T79c0ff64Tb4b4b4;
Te6edf3p_as_y Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72else
Tff7b72if Tb4b4b4(Te6edf3disp_mode Tff7b72=Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4) Tb4b4b4{
Te6edf3p_ad_x Tff7b72= T79c0ff0 Tff7b72* Te6edf3DISPLAY_SCALETb4b4b4;
Te6edf3p_ad_y Tff7b72= T79c0ff0 Tff7b72* Te6edf3DISPLAY_SCALETb4b4b4;
Te6edf3p_as_x Tff7b72= T79c0ff0 Tff7b72* Te6edf3DISPLAY_SCALETb4b4b4;
Te6edf3p_as_y Tff7b72= T79c0ff64 Tff7b72* Te6edf3DISPLAY_SCALETb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3disp_mode Tff7b72=Tff7b72= Te6edf3DISP_MODE_LANDSCAPETb4b4b4) Tb4b4b4{
Te6edf3p_ad_x Tff7b72= T79c0ff0 Tff7b72* Te6edf3DISPLAY_SCALETb4b4b4;
Te6edf3p_ad_y Tff7b72= T79c0ff0 Tff7b72* Te6edf3DISPLAY_SCALETb4b4b4;
Te6edf3p_as_x Tff7b72= T79c0ff64 Tff7b72* Te6edf3DISPLAY_SCALETb4b4b4;
Te6edf3p_as_y Tff7b72= T79c0ff0 Tff7b72* Te6edf3DISPLAY_SCALETb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif
Tb4b4b4}

Tffa657uint8_t Te6edf3display_contrast Tff7b72= T79c0ff0x00Tb4b4b4;
Tff7b72#Tff7b72if BOARD_MODEL == BOARD_TBEAM_S_V1
Tffa657void Td2a8ffset_contrastTb4b4b4(Te6edf3Adafruit_SH1106G Tff7b72*Te6edf3displayTb4b4b4, Tffa657uint8_t Te6edf3valueTb4b4b4) Tb4b4b4{
Tb4b4b4}
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HELTEC_T114
Tffa657void Td2a8ffset_contrastTb4b4b4(Te6edf3ST7789Spi Tff7b72*Te6edf3displayTb4b4b4, Tffa657uint8_t Te6edf3valueTb4b4b4) Tb4b4b4{ Tb4b4b4}
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TECHO
Tffa657void Td2a8ffset_contrastTb4b4b4(Tffa657void Tff7b72*Te6edf3displayTb4b4b4, Tffa657uint8_t Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3value Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{ Te6edf3analogWriteTb4b4b4(Te6edf3pin_backlightTb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{ Te6edf3analogWriteTb4b4b4(Te6edf3pin_backlightTb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4; Tb4b4b4}
Tb4b4b4}
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TDECK
Tffa657void Td2a8ffset_contrastTb4b4b4(Te6edf3Adafruit_ST7789 Tff7b72*Te6edf3displayTb4b4b4, Tffa657uint8_t Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72static Tffa657uint8_t Te6edf3level Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72static Tffa657uint8_t Te6edf3steps Tff7b72= T79c0ff16Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3value Tff7b72> T79c0ff15Tb4b4b4) Te6edf3value Tff7b72= T79c0ff15Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3value Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3digitalWriteTb4b4b4(Te6edf3DISPLAY_BL_PINTb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff3Tb4b4b4)Tb4b4b4;
Te6edf3level Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3level Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3digitalWriteTb4b4b4(Te6edf3DISPLAY_BL_PINTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3level Tff7b72= Te6edf3stepsTb4b4b4;
Te6edf3delayMicrosecondsTb4b4b4(T79c0ff30Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657int Te6edf3from Tff7b72= Te6edf3steps Tff7b72- Te6edf3levelTb4b4b4;
Tffa657int Te6edf3to Tff7b72= Te6edf3steps Tff7b72- Te6edf3valueTb4b4b4;
Tffa657int Te6edf3num Tff7b72= Tb4b4b4(Te6edf3steps Tff7b72+ Te6edf3to Tff7b72- Te6edf3fromTb4b4b4) Tff7b72% Te6edf3stepsTb4b4b4;
Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3numTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Te6edf3digitalWriteTb4b4b4(Te6edf3DISPLAY_BL_PINTb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3digitalWriteTb4b4b4(Te6edf3DISPLAY_BL_PINTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3level Tff7b72= Te6edf3valueTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72else
Tffa657void Td2a8ffset_contrastTb4b4b4(Te6edf3Adafruit_SSD1306 Tff7b72*Te6edf3displayTb4b4b4, Tffa657uint8_t Te6edf3contrastTb4b4b4) Tb4b4b4{
Te6edf3displayTff7b72-Tff7b72>Te6edf3ssd1306_commandTb4b4b4(Te6edf3SSD1306_SETCONTRASTTb4b4b4)Tb4b4b4;
Te6edf3displayTff7b72-Tff7b72>Te6edf3ssd1306_commandTb4b4b4(Te6edf3contrastTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif

Tffa657bool Td2a8ffdisplay_initTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if HAS_DISPLAY
Tff7b72#Tff7b72if BOARD_MODEL == BOARD_RNODE_NG_20 || BOARD_MODEL == BOARD_LORA32_V2_0
Tffa657int Te6edf3pin_display_en Tff7b72= T79c0ff16Tb4b4b4;
Te6edf3digitalWriteTb4b4b4(Te6edf3pin_display_enTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff50Tb4b4b4)Tb4b4b4;
Te6edf3digitalWriteTb4b4b4(Te6edf3pin_display_enTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_T3S3
Te6edf3WireTb4b4b4.Te6edf3beginTb4b4b4(Te6edf3SDA_OLEDTb4b4b4, Te6edf3SCL_OLEDTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HELTEC32_V2
Te6edf3WireTb4b4b4.Te6edf3beginTb4b4b4(Te6edf3SDA_OLEDTb4b4b4, Te6edf3SCL_OLEDTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HELTEC32_V3
T8b949e// enable vext / pin 36
Te6edf3pinModeTb4b4b4(Te6edf3VextTb4b4b4, Te6edf3OUTPUTTb4b4b4)Tb4b4b4;
Te6edf3digitalWriteTb4b4b4(Te6edf3VextTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff50Tb4b4b4)Tb4b4b4;
Tffa657int Te6edf3pin_display_en Tff7b72= T79c0ff21Tb4b4b4;
Te6edf3pinModeTb4b4b4(Te6edf3pin_display_enTb4b4b4, Te6edf3OUTPUTTb4b4b4)Tb4b4b4;
Te6edf3digitalWriteTb4b4b4(Te6edf3pin_display_enTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff50Tb4b4b4)Tb4b4b4;
Te6edf3digitalWriteTb4b4b4(Te6edf3pin_display_enTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff50Tb4b4b4)Tb4b4b4;
Te6edf3WireTb4b4b4.Te6edf3beginTb4b4b4(Te6edf3SDA_OLEDTb4b4b4, Te6edf3SCL_OLEDTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HELTEC32_V4
T8b949e// enable vext / pin 36
Te6edf3pinModeTb4b4b4(Te6edf3VextTb4b4b4, Te6edf3OUTPUTTb4b4b4)Tb4b4b4;
Te6edf3digitalWriteTb4b4b4(Te6edf3VextTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff50Tb4b4b4)Tb4b4b4;
Tffa657int Te6edf3pin_display_en Tff7b72= T79c0ff21Tb4b4b4;
Te6edf3pinModeTb4b4b4(Te6edf3pin_display_enTb4b4b4, Te6edf3OUTPUTTb4b4b4)Tb4b4b4;
Te6edf3digitalWriteTb4b4b4(Te6edf3pin_display_enTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff50Tb4b4b4)Tb4b4b4;
Te6edf3digitalWriteTb4b4b4(Te6edf3pin_display_enTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff50Tb4b4b4)Tb4b4b4;
Te6edf3WireTb4b4b4.Te6edf3beginTb4b4b4(Te6edf3SDA_OLEDTb4b4b4, Te6edf3SCL_OLEDTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_LORA32_V1_0
Tffa657int Te6edf3pin_display_en Tff7b72= T79c0ff16Tb4b4b4;
Te6edf3digitalWriteTb4b4b4(Te6edf3pin_display_enTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff50Tb4b4b4)Tb4b4b4;
Te6edf3digitalWriteTb4b4b4(Te6edf3pin_display_enTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4;
Te6edf3WireTb4b4b4.Te6edf3beginTb4b4b4(Te6edf3SDA_OLEDTb4b4b4, Te6edf3SCL_OLEDTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HELTEC_T114
Te6edf3pinModeTb4b4b4(Te6edf3PIN_T114_TFT_ENTb4b4b4, Te6edf3OUTPUTTb4b4b4)Tb4b4b4;
Te6edf3digitalWriteTb4b4b4(Te6edf3PIN_T114_TFT_ENTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TECHO
Te6edf3displayTb4b4b4.Te6edf3initTb4b4b4(T79c0ff0Tb4b4b4, Tffa657trueTb4b4b4, T79c0ff10Tb4b4b4, Tffa657falseTb4b4b4, Te6edf3displaySPITb4b4b4, Te6edf3SPISettingsTb4b4b4(T79c0ff4000000Tb4b4b4, Te6edf3MSBFIRSTTb4b4b4, Te6edf3SPI_MODE0Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setPartialWindowTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3DISP_WTb4b4b4, Te6edf3DISP_HTb4b4b4)Tb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3epd2Tb4b4b4.Te6edf3setBusyCallbackTb4b4b4(Te6edf3busyCallbackTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72if HAS_BACKLIGHT
Te6edf3pinModeTb4b4b4(Te6edf3pin_backlightTb4b4b4, Te6edf3OUTPUTTb4b4b4)Tb4b4b4;
Te6edf3analogWriteTb4b4b4(Te6edf3pin_backlightTb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TBEAM_S_V1
Te6edf3WireTb4b4b4.Te6edf3beginTb4b4b4(Te6edf3SDA_OLEDTb4b4b4, Te6edf3SCL_OLEDTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_XIAO_S3
Te6edf3WireTb4b4b4.Te6edf3beginTb4b4b4(Te6edf3SDA_OLEDTb4b4b4, Te6edf3SCL_OLEDTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif

Tff7b72#Tff7b72if HAS_EEPROM
Tffa657uint8_t Te6edf3display_rotation Tff7b72= Te6edf3EEPROMTb4b4b4.Te6edf3readTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_DROTTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_NRF52
Tffa657uint8_t Te6edf3display_rotation Tff7b72= Te6edf3eeprom_readTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_DROTTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72if Tb4b4b4(Te6edf3display_rotation Tff7b72< T79c0ff0 Te6edf3or Te6edf3display_rotation Tff7b72> T79c0ff3Tb4b4b4) Te6edf3display_rotation Tff7b72= T79c0ff0xFFTb4b4b4;

Tff7b72#Tff7b72if DISP_CUSTOM_ADDR == true
Tff7b72#Tff7b72if HAS_EEPROM
Tffa657uint8_t Te6edf3display_address Tff7b72= Te6edf3EEPROMTb4b4b4.Te6edf3readTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_DADRTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_NRF52
Tffa657uint8_t Te6edf3display_address Tff7b72= Te6edf3eeprom_readTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_DADRTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72if Tb4b4b4(Te6edf3display_address Tff7b72=Tff7b72= T79c0ff0xFFTb4b4b4) Te6edf3display_address Tff7b72= Te6edf3DISP_ADDRTb4b4b4;
Tff7b72#Tff7b72else
Tffa657uint8_t Te6edf3display_address Tff7b72= Te6edf3DISP_ADDRTb4b4b4;
Tff7b72#Tff7b72endif

Tff7b72#Tff7b72if HAS_EEPROM
Tff7b72if Tb4b4b4(Te6edf3EEPROMTb4b4b4.Te6edf3readTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_BSETTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Te6edf3CONF_OK_BYTETb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3db_timeout Tff7b72= Te6edf3EEPROMTb4b4b4.Te6edf3readTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_DBLKTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3db_timeout Tff7b72=Tff7b72= T79c0ff0x00Tb4b4b4) Tb4b4b4{
Te6edf3display_blanking_enabled Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3display_blanking_enabled Tff7b72= Tffa657trueTb4b4b4;
Te6edf3display_blanking_timeout Tff7b72= Te6edf3db_timeoutTff7b72*T79c0ff1000Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_NRF52
Tff7b72if Tb4b4b4(Te6edf3eeprom_readTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_BSETTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Te6edf3CONF_OK_BYTETb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3db_timeout Tff7b72= Te6edf3eeprom_readTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_DBLKTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3db_timeout Tff7b72=Tff7b72= T79c0ff0x00Tb4b4b4) Tb4b4b4{
Te6edf3display_blanking_enabled Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3display_blanking_enabled Tff7b72= Tffa657trueTb4b4b4;
Te6edf3display_blanking_timeout Tff7b72= Te6edf3db_timeoutTff7b72*T79c0ff1000Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72if BOARD_MODEL == BOARD_TECHO
T8b949e// Don't check if display is actually connected
Tff7b72ifTb4b4b4(Tffa657falseTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TDECK
Te6edf3displayTb4b4b4.Te6edf3initTb4b4b4(T79c0ff240Tb4b4b4, T79c0ff320Tb4b4b4)Tb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setSPISpeedTb4b4b4(T79c0ff80e6Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HELTEC_T114
Te6edf3displayTb4b4b4.Te6edf3initTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// set white as default pixel colour for Heltec T114
Te6edf3displayTb4b4b4.Te6edf3setRGBTb4b4b4(Te6edf3COLOR565Tb4b4b4(T79c0ff0xFFTb4b4b4, T79c0ff0xFFTb4b4b4, T79c0ff0xFFTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tffa657falseTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TBEAM_S_V1
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3displayTb4b4b4.Te6edf3beginTb4b4b4(Te6edf3display_addressTb4b4b4, Tffa657trueTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72else
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3displayTb4b4b4.Te6edf3beginTb4b4b4(Te6edf3SSD1306_SWITCHCAPVCCTb4b4b4, Te6edf3display_addressTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72endif
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3set_contrastTb4b4b4(Tff7b72&Te6edf3displayTb4b4b4, Te6edf3display_contrastTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3display_rotation Tff7b72!Tff7b72= T79c0ff0xFFTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3display_rotation Tff7b72=Tff7b72= T79c0ff0 Tff7b72|Tff7b72| Te6edf3display_rotation Tff7b72=Tff7b72= T79c0ff2Tb4b4b4) Tb4b4b4{
Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_LANDSCAPETb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4;
Tb4b4b4}
Te6edf3displayTb4b4b4.Te6edf3setRotationTb4b4b4(Te6edf3display_rotationTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72#Tff7b72if BOARD_MODEL == BOARD_RNODE_NG_20
Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setRotationTb4b4b4(T79c0ff3Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_RNODE_NG_21
Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setRotationTb4b4b4(T79c0ff3Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_LORA32_V1_0
Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setRotationTb4b4b4(T79c0ff3Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_LORA32_V2_0
Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setRotationTb4b4b4(T79c0ff3Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_LORA32_V2_1
Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_LANDSCAPETb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setRotationTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TBEAM
Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_LANDSCAPETb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setRotationTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TBEAM_S_V1
Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setRotationTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HELTEC32_V2
Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setRotationTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HELTEC32_V3
Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setRotationTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HELTEC32_V4
Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setRotationTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HELTEC_T114
Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setRotationTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_RAK4631
Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_LANDSCAPETb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setRotationTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TDECK
Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setRotationTb4b4b4(T79c0ff3Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TECHO
Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setRotationTb4b4b4(T79c0ff3Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72else
Te6edf3disp_mode Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setRotationTb4b4b4(T79c0ff3Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}

Te6edf3update_area_positionsTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3WATERFALL_SIZETb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{ Te6edf3waterfallTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= T79c0ff0Tb4b4b4; Tb4b4b4}

Te6edf3last_page_flip Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3stat_areaTb4b4b4.Te6edf3cp437Tb4b4b4(Tffa657trueTb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3cp437Tb4b4b4(Tffa657trueTb4b4b4)Tb4b4b4;

Tff7b72#Tff7b72if BOARD_MODEL != BOARD_HELTEC_T114
Te6edf3displayTb4b4b4.Te6edf3cp437Tb4b4b4(Tffa657trueTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif

Tff7b72#Tff7b72if HAS_EEPROM
Te6edf3display_intensity Tff7b72= Te6edf3EEPROMTb4b4b4.Te6edf3readTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_DINTTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_NRF52
Te6edf3display_intensity Tff7b72= Te6edf3eeprom_readTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_DINTTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Te6edf3display_unblank_intensity Tff7b72= Te6edf3display_intensityTb4b4b4;

Tff7b72#Tff7b72if BOARD_MODEL == BOARD_TECHO
Tff7b72#Tff7b72if HAS_BACKLIGHT
Tff7b72if Tb4b4b4(Te6edf3display_intensity Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{ Te6edf3analogWriteTb4b4b4(Te6edf3pin_backlightTb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{ Te6edf3analogWriteTb4b4b4(Te6edf3pin_backlightTb4b4b4, Te6edf3display_intensityTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72endif

Tff7b72#Tff7b72if BOARD_MODEL == BOARD_TDECK
Te6edf3displayTb4b4b4.Te6edf3fillScreenTb4b4b4(Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif

Tff7b72#Tff7b72if BOARD_MODEL == BOARD_HELTEC_T114
T8b949e// Enable backlight led (display is always black without this)
Te6edf3fillRectTb4b4b4(Te6edf3p_ad_xTb4b4b4, Te6edf3p_ad_yTb4b4b4, T79c0ff128Tb4b4b4, T79c0ff128Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Te6edf3fillRectTb4b4b4(Te6edf3p_as_xTb4b4b4, Te6edf3p_as_yTb4b4b4, T79c0ff128Tb4b4b4, T79c0ff128Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Te6edf3pinModeTb4b4b4(Te6edf3PIN_T114_TFT_BLGTTb4b4b4, Te6edf3OUTPUTTb4b4b4)Tb4b4b4;
Te6edf3digitalWriteTb4b4b4(Te6edf3PIN_T114_TFT_BLGTTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif

Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72else
Tff7b72return Tffa657falseTb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}

T8b949e// Draws a line on the screen
Tffa657void Te6edf3drawLineTb4b4b4(Tffa657int16_t Te6edf3xTb4b4b4, Tffa657int16_t Te6edf3yTb4b4b4, Tffa657int16_t Te6edf3widthTb4b4b4, Tffa657int16_t Te6edf3heightTb4b4b4, Tffa657uint16_t Te6edf3colourTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if BOARD_MODEL == BOARD_HELTEC_T114
Tff7b72ifTb4b4b4(Te6edf3colour Tff7b72=Tff7b72= Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4{
Te6edf3displayTb4b4b4.Te6edf3setColorTb4b4b4(Te6edf3WHITETb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72ifTb4b4b4(Te6edf3colour Tff7b72=Tff7b72= Te6edf3SSD1306_BLACKTb4b4b4) Tb4b4b4{
Te6edf3displayTb4b4b4.Te6edf3setColorTb4b4b4(Te6edf3BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3displayTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72else
Te6edf3displayTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4, Te6edf3colourTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}

T8b949e// Draws a filled rectangle on the screen
Tffa657void Te6edf3fillRectTb4b4b4(Tffa657int16_t Te6edf3xTb4b4b4, Tffa657int16_t Te6edf3yTb4b4b4, Tffa657int16_t Te6edf3widthTb4b4b4, Tffa657int16_t Te6edf3heightTb4b4b4, Tffa657uint16_t Te6edf3colourTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if BOARD_MODEL == BOARD_HELTEC_T114
Tff7b72ifTb4b4b4(Te6edf3colour Tff7b72=Tff7b72= Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4{
Te6edf3displayTb4b4b4.Te6edf3setColorTb4b4b4(Te6edf3WHITETb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72ifTb4b4b4(Te6edf3colour Tff7b72=Tff7b72= Te6edf3SSD1306_BLACKTb4b4b4) Tb4b4b4{
Te6edf3displayTb4b4b4.Te6edf3setColorTb4b4b4(Te6edf3BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3displayTb4b4b4.Te6edf3fillRectTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72else
Te6edf3displayTb4b4b4.Te6edf3fillRectTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4, Te6edf3colourTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}

T8b949e// Draws a bitmap to the display and auto scales it based on the boards configured DISPLAY_SCALE
Tffa657void Te6edf3drawBitmapTb4b4b4(Tffa657int16_t Te6edf3startXTb4b4b4, Tffa657int16_t Te6edf3startYTb4b4b4, Tff7b72const Tffa657uint8_tTff7b72* Te6edf3bitmapTb4b4b4, Tffa657int16_t Te6edf3bitmapWidthTb4b4b4, Tffa657int16_t Te6edf3bitmapHeightTb4b4b4, Tffa657uint16_t Te6edf3foregroundColourTb4b4b4, Tffa657uint16_t Te6edf3backgroundColourTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if DISPLAY_SCALE == 1
Te6edf3displayTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3startXTb4b4b4, Te6edf3startYTb4b4b4, Te6edf3bitmapTb4b4b4, Te6edf3bitmapWidthTb4b4b4, Te6edf3bitmapHeightTb4b4b4, Te6edf3foregroundColourTb4b4b4, Te6edf3backgroundColourTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72else
Tff7b72forTb4b4b4(Tffa657int16_t Te6edf3row Tff7b72= T79c0ff0Tb4b4b4; Te6edf3row Tff7b72< Te6edf3bitmapHeightTb4b4b4; Te6edf3rowTff7b72+Tff7b72+Tb4b4b4)Tb4b4b4{
Tff7b72forTb4b4b4(Tffa657int16_t Te6edf3col Tff7b72= T79c0ff0Tb4b4b4; Te6edf3col Tff7b72< Te6edf3bitmapWidthTb4b4b4; Te6edf3colTff7b72+Tff7b72+Tb4b4b4)Tb4b4b4{

T8b949e// determine index and bitmask
Tffa657int16_t Te6edf3index Tff7b72= Te6edf3row Tff7b72* Tb4b4b4(Tb4b4b4(Te6edf3bitmapWidth Tff7b72+ T79c0ff7Tb4b4b4) Tff7b72/ T79c0ff8Tb4b4b4) Tff7b72+ Tb4b4b4(Te6edf3col Tff7b72/ T79c0ff8Tb4b4b4)Tb4b4b4;
Tffa657uint8_t Te6edf3bitmask Tff7b72= T79c0ff1 Tff7b72<Tff7b72< Tb4b4b4(T79c0ff7 Tff7b72- Tb4b4b4(Te6edf3col Tff7b72% T79c0ff8Tb4b4b4)Tb4b4b4)Tb4b4b4;

T8b949e// check if the current pixel is set in the bitmap
Tff7b72ifTb4b4b4(Te6edf3bitmapTb4b4b4[Te6edf3indexTb4b4b4] Tff7b72& Te6edf3bitmaskTb4b4b4)Tb4b4b4{
T8b949e// draw a scaled rectangle for the foreground pixel
Te6edf3fillRectTb4b4b4(Te6edf3startX Tff7b72+ Te6edf3col Tff7b72* Te6edf3DISPLAY_SCALETb4b4b4, Te6edf3startY Tff7b72+ Te6edf3row Tff7b72* Te6edf3DISPLAY_SCALETb4b4b4, Te6edf3DISPLAY_SCALETb4b4b4, Te6edf3DISPLAY_SCALETb4b4b4, Te6edf3foregroundColourTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
T8b949e// draw a scaled rectangle for the background pixel
Te6edf3fillRectTb4b4b4(Te6edf3startX Tff7b72+ Te6edf3col Tff7b72* Te6edf3DISPLAY_SCALETb4b4b4, Te6edf3startY Tff7b72+ Te6edf3row Tff7b72* Te6edf3DISPLAY_SCALETb4b4b4, Te6edf3DISPLAY_SCALETb4b4b4, Te6edf3DISPLAY_SCALETb4b4b4, Te6edf3backgroundColourTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tb4b4b4}
Tb4b4b4}
Tff7b72#Tff7b72endif
Tb4b4b4}

Tff7b72extern Tffa657uint8_t Te6edf3wifi_modeTb4b4b4;
Tff7b72extern Tffa657bool Te6edf3wifi_is_connectedTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72extern Tffa657bool Te6edf3wifi_host_is_connectedTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Te6edf3draw_cable_iconTb4b4b4(Tffa657int Te6edf3pxTb4b4b4, Tffa657int Te6edf3pyTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if HAS_WIFI
Tff7b72if Tb4b4b4(Te6edf3wifi_mode Tff7b72=Tff7b72= Te6edf3WR_WIFI_OFFTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3cable_state Tff7b72=Tff7b72= Te6edf3CABLE_STATE_DISCONNECTEDTb4b4b4) Tb4b4b4{ Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_cableTff7b72+T79c0ff0Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3cable_state Tff7b72=Tff7b72= Te6edf3CABLE_STATE_CONNECTEDTb4b4b4) Tb4b4b4{ Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_cableTff7b72+T79c0ff1Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4; Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3wifi_mode Tff7b72=Tff7b72= Te6edf3WR_WIFI_STATb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3wifi_is_connectedTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_wifiTff7b72+T79c0ff3Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3wifi_host_is_connectedTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{ Te6edf3stat_areaTb4b4b4.Te6edf3fillRectTb4b4b4(Te6edf3pxTff7b72+T79c0ff5Tb4b4b4, Te6edf3pyTff7b72+T79c0ff12Tb4b4b4, T79c0ff6Tb4b4b4, T79c0ff3Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4; Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{ Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_wifiTff7b72+T79c0ff2Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4; Tb4b4b4}
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3wifi_mode Tff7b72=Tff7b72= Te6edf3WR_WIFI_APTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3wifi_host_is_connectedTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{ Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_wifiTff7b72+T79c0ff1Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{ Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_wifiTff7b72+T79c0ff0Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4; Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3cable_state Tff7b72=Tff7b72= Te6edf3CABLE_STATE_DISCONNECTEDTb4b4b4) Tb4b4b4{ Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_cableTff7b72+T79c0ff0Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3cable_state Tff7b72=Tff7b72= Te6edf3CABLE_STATE_CONNECTEDTb4b4b4) Tb4b4b4{ Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_cableTff7b72+T79c0ff1Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4; Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72#Tff7b72else
Tff7b72if Tb4b4b4(Te6edf3cable_state Tff7b72=Tff7b72= Te6edf3CABLE_STATE_DISCONNECTEDTb4b4b4) Tb4b4b4{ Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_cableTff7b72+T79c0ff0Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3cable_state Tff7b72=Tff7b72= Te6edf3CABLE_STATE_CONNECTEDTb4b4b4) Tb4b4b4{ Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_cableTff7b72+T79c0ff1Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72endif
Tb4b4b4}

Tffa657void Te6edf3draw_bt_iconTb4b4b4(Tffa657int Te6edf3pxTb4b4b4, Tffa657int Te6edf3pyTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3bt_state Tff7b72=Tff7b72= Te6edf3BT_STATE_OFFTb4b4b4) Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_btTff7b72+T79c0ff0Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3bt_state Tff7b72=Tff7b72= Te6edf3BT_STATE_ONTb4b4b4) Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_btTff7b72+T79c0ff1Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3bt_state Tff7b72=Tff7b72= Te6edf3BT_STATE_PAIRINGTb4b4b4) Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_btTff7b72+T79c0ff2Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3bt_state Tff7b72=Tff7b72= Te6edf3BT_STATE_CONNECTEDTb4b4b4) Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_btTff7b72+T79c0ff3Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_btTff7b72+T79c0ff0Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tffa657void Te6edf3draw_lora_iconTb4b4b4(Tffa657int Te6edf3pxTb4b4b4, Tffa657int Te6edf3pyTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3radio_onlineTb4b4b4) Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_rfTff7b72+T79c0ff1Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_rfTff7b72+T79c0ff0Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tffa657void Te6edf3draw_mw_iconTb4b4b4(Tffa657int Te6edf3pxTb4b4b4, Tffa657int Te6edf3pyTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3mw_radio_onlineTb4b4b4) Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_rfTff7b72+T79c0ff3Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3bm_rfTff7b72+T79c0ff2Tff7b72*T79c0ff32Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff16Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tffa657uint8_t Te6edf3charge_tick Tff7b72= T79c0ff0Tb4b4b4;
Tffa657void Te6edf3draw_battery_barsTb4b4b4(Tffa657int Te6edf3pxTb4b4b4, Tffa657int Te6edf3pyTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3pmu_readyTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3battery_readyTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3battery_installedTb4b4b4) Tb4b4b4{
Tffa657float Te6edf3battery_value Tff7b72= Te6edf3battery_percentTb4b4b4;

T8b949e// Disable charging state display for now, since
T8b949e// boards without dedicated PMU are completely
T8b949e// unreliable for determining actual charging state.
Tffa657bool Te6edf3disable_charge_status Tff7b72= Tffa657falseTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3battery_indeterminate Tff7b72&Tff7b72& Te6edf3battery_state Tff7b72=Tff7b72= Te6edf3BATTERY_STATE_CHARGINGTb4b4b4) Tb4b4b4{
Te6edf3disable_charge_status Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3battery_state Tff7b72=Tff7b72= Te6edf3BATTERY_STATE_CHARGING Tff7b72&Tff7b72& Tff7b72!Te6edf3disable_charge_statusTb4b4b4) Tb4b4b4{
Tffa657float Te6edf3battery_prog Tff7b72= Te6edf3battery_percentTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3battery_prog Tff7b72> T79c0ff85Tb4b4b4) Tb4b4b4{ Te6edf3battery_prog Tff7b72= T79c0ff84Tb4b4b4; Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3charge_tick Tff7b72< Te6edf3battery_prog Tb4b4b4) Tb4b4b4{ Te6edf3charge_tick Tff7b72= Te6edf3battery_progTb4b4b4; Tb4b4b4}
Te6edf3battery_value Tff7b72= Te6edf3charge_tickTb4b4b4;
Te6edf3charge_tick Tff7b72+Tff7b72= T79c0ff3Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3charge_tick Tff7b72> T79c0ff100Tb4b4b4) Te6edf3charge_tick Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3battery_indeterminate Tff7b72&Tff7b72& Te6edf3battery_state Tff7b72=Tff7b72= Te6edf3BATTERY_STATE_CHARGING Tff7b72&Tff7b72& Tff7b72!Te6edf3disable_charge_statusTb4b4b4) Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3fillRectTb4b4b4(Te6edf3pxT79c0ff-2Tb4b4b4, Te6edf3pyT79c0ff-2Tb4b4b4, T79c0ff18Tb4b4b4, T79c0ff7Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxT79c0ff-2Tb4b4b4, Te6edf3pyT79c0ff-2Tb4b4b4, Te6edf3bm_plugTb4b4b4, T79c0ff17Tb4b4b4, T79c0ff7Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3battery_state Tff7b72=Tff7b72= Te6edf3BATTERY_STATE_CHARGEDTb4b4b4) Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3fillRectTb4b4b4(Te6edf3pxT79c0ff-2Tb4b4b4, Te6edf3pyT79c0ff-2Tb4b4b4, T79c0ff18Tb4b4b4, T79c0ff7Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxT79c0ff-2Tb4b4b4, Te6edf3pyT79c0ff-2Tb4b4b4, Te6edf3bm_plugTb4b4b4, T79c0ff17Tb4b4b4, T79c0ff7Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
T8b949e// stat_area.fillRect(px, py, 14, 3, SSD1306_BLACK);
Te6edf3stat_areaTb4b4b4.Te6edf3fillRectTb4b4b4(Te6edf3pxT79c0ff-2Tb4b4b4, Te6edf3pyT79c0ff-2Tb4b4b4, T79c0ff18Tb4b4b4, T79c0ff7Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Te6edf3stat_areaTb4b4b4.Te6edf3drawRectTb4b4b4(Te6edf3pxT79c0ff-2Tb4b4b4, Te6edf3pyT79c0ff-2Tb4b4b4, T79c0ff17Tb4b4b4, T79c0ff7Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff15Tb4b4b4, Te6edf3pyTb4b4b4, Te6edf3pxTff7b72+T79c0ff15Tb4b4b4, Te6edf3pyTff7b72+T79c0ff3Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3battery_value Tff7b72> T79c0ff7Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, Te6edf3pxTb4b4b4, Te6edf3pyTff7b72+T79c0ff2Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3battery_value Tff7b72> T79c0ff20Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff1Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTb4b4b4, Te6edf3pxTff7b72+T79c0ff1Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff2Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3battery_value Tff7b72> T79c0ff33Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff2Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTb4b4b4, Te6edf3pxTff7b72+T79c0ff2Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff2Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3battery_value Tff7b72> T79c0ff46Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff3Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTb4b4b4, Te6edf3pxTff7b72+T79c0ff3Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff2Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3battery_value Tff7b72> T79c0ff59Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff4Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTb4b4b4, Te6edf3pxTff7b72+T79c0ff4Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff2Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3battery_value Tff7b72> T79c0ff72Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff5Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTb4b4b4, Te6edf3pxTff7b72+T79c0ff5Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff2Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3battery_value Tff7b72> T79c0ff85Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff6Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTb4b4b4, Te6edf3pxTff7b72+T79c0ff6Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff2Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3fillRectTb4b4b4(Te6edf3pxT79c0ff-2Tb4b4b4, Te6edf3pyT79c0ff-2Tb4b4b4, T79c0ff18Tb4b4b4, T79c0ff7Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxT79c0ff-2Tb4b4b4, Te6edf3pyT79c0ff-2Tb4b4b4, Te6edf3bm_plugTb4b4b4, T79c0ff17Tb4b4b4, T79c0ff7Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3fillRectTb4b4b4(Te6edf3pxT79c0ff-2Tb4b4b4, Te6edf3pyT79c0ff-2Tb4b4b4, T79c0ff18Tb4b4b4, T79c0ff7Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3pxT79c0ff-2Tb4b4b4, Te6edf3pyT79c0ff-2Tb4b4b4, Te6edf3bm_plugTb4b4b4, T79c0ff17Tb4b4b4, T79c0ff7Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72#Tff7b72define Q_SNR_STEP 2.0
Tff7b72#Tff7b72define Q_SNR_MIN_BASE -9.0
Tff7b72#Tff7b72define Q_SNR_MAX 6.0
Tffa657void Te6edf3draw_quality_barsTb4b4b4(Tffa657int Te6edf3pxTb4b4b4, Tffa657int Te6edf3pyTb4b4b4) Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3fillRectTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, T79c0ff13Tb4b4b4, T79c0ff7Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3radio_onlineTb4b4b4) Tb4b4b4{
Tffa657signed Tffa657char Te6edf3t_snr Tff7b72= Tb4b4b4(Tffa657signed Tffa657intTb4b4b4)Te6edf3last_snr_rawTb4b4b4;
Tffa657int Te6edf3snr_int Tff7b72= Tb4b4b4(Tffa657intTb4b4b4)Te6edf3t_snrTb4b4b4;
Tffa657float Te6edf3snr_min Tff7b72= Te6edf3Q_SNR_MIN_BASETff7b72-Tb4b4b4(Tffa657intTb4b4b4)Te6edf3lora_sfTff7b72*Te6edf3Q_SNR_STEPTb4b4b4;
Tffa657float Te6edf3snr_span Tff7b72= Tb4b4b4(Te6edf3Q_SNR_MAXTff7b72-Te6edf3snr_minTb4b4b4)Tb4b4b4;
Tffa657float Te6edf3snr Tff7b72= Tb4b4b4(Tb4b4b4(Tffa657intTb4b4b4)Te6edf3snr_intTb4b4b4) Tff7b72* T79c0ff0.25Tb4b4b4;
Tffa657float Te6edf3quality Tff7b72= Tb4b4b4(Tb4b4b4(Te6edf3snrTff7b72-Te6edf3snr_minTb4b4b4)Tff7b72/Tb4b4b4(Te6edf3snr_spanTb4b4b4)Tb4b4b4)Tff7b72*T79c0ff100Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3quality Tff7b72> T79c0ff100.0Tb4b4b4) Te6edf3quality Tff7b72= T79c0ff100.0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3quality Tff7b72< T79c0ff0.0Tb4b4b4) Te6edf3quality Tff7b72= T79c0ff0.0Tb4b4b4;

T8b949e// Serial.printf("Last SNR: %.2f\n, quality: %.2f\n", snr, quality);
Tff7b72if Tb4b4b4(Te6edf3quality Tff7b72> T79c0ff0Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff0Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff7Tb4b4b4, Te6edf3pxTff7b72+T79c0ff0Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff6Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3quality Tff7b72> T79c0ff15Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff1Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff7Tb4b4b4, Te6edf3pxTff7b72+T79c0ff1Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff5Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3quality Tff7b72> T79c0ff30Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff2Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff7Tb4b4b4, Te6edf3pxTff7b72+T79c0ff2Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff4Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3quality Tff7b72> T79c0ff45Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff3Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff7Tb4b4b4, Te6edf3pxTff7b72+T79c0ff3Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff3Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3quality Tff7b72> T79c0ff60Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff4Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff7Tb4b4b4, Te6edf3pxTff7b72+T79c0ff4Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff2Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3quality Tff7b72> T79c0ff75Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff5Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff7Tb4b4b4, Te6edf3pxTff7b72+T79c0ff5Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff1Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3quality Tff7b72> T79c0ff90Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff6Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff7Tb4b4b4, Te6edf3pxTff7b72+T79c0ff6Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff0Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72#Tff7b72if MODEM == SX1280
Tff7b72#Tff7b72define S_RSSI_MIN -105.0
Tff7b72#Tff7b72define S_RSSI_MAX -65.0
Tff7b72#Tff7b72else
Tff7b72#Tff7b72define S_RSSI_MIN -135.0
Tff7b72#Tff7b72define S_RSSI_MAX -75.0
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72define S_RSSI_SPAN (S_RSSI_MAX-S_RSSI_MIN)
Tffa657void Te6edf3draw_signal_barsTb4b4b4(Tffa657int Te6edf3pxTb4b4b4, Tffa657int Te6edf3pyTb4b4b4) Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3fillRectTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4, T79c0ff13Tb4b4b4, T79c0ff7Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3radio_onlineTb4b4b4) Tb4b4b4{
Tffa657int Te6edf3rssi_val Tff7b72= Te6edf3last_rssiTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3rssi_val Tff7b72< Te6edf3S_RSSI_MINTb4b4b4) Te6edf3rssi_val Tff7b72= Te6edf3S_RSSI_MINTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3rssi_val Tff7b72> Te6edf3S_RSSI_MAXTb4b4b4) Te6edf3rssi_val Tff7b72= Te6edf3S_RSSI_MAXTb4b4b4;
Tffa657int Te6edf3signal Tff7b72= Tb4b4b4(Tb4b4b4(Te6edf3rssi_val Tff7b72- Te6edf3S_RSSI_MINTb4b4b4)Tff7b72*Tb4b4b4(T79c0ff1.0Tff7b72/Te6edf3S_RSSI_SPANTb4b4b4)Tb4b4b4)Tff7b72*T79c0ff100.0Tb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3signal Tff7b72> T79c0ff100.0Tb4b4b4) Te6edf3signal Tff7b72= T79c0ff100.0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3signal Tff7b72< T79c0ff0.0Tb4b4b4) Te6edf3signal Tff7b72= T79c0ff0.0Tb4b4b4;

T8b949e// Serial.printf("Last SNR: %.2f\n, quality: %.2f\n", snr, quality);
Tff7b72if Tb4b4b4(Te6edf3signal Tff7b72> T79c0ff85Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff0Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff7Tb4b4b4, Te6edf3pxTff7b72+T79c0ff0Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff0Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3signal Tff7b72> T79c0ff72Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff1Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff7Tb4b4b4, Te6edf3pxTff7b72+T79c0ff1Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff1Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3signal Tff7b72> T79c0ff59Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff2Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff7Tb4b4b4, Te6edf3pxTff7b72+T79c0ff2Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff2Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3signal Tff7b72> T79c0ff46Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff3Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff7Tb4b4b4, Te6edf3pxTff7b72+T79c0ff3Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff3Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3signal Tff7b72> T79c0ff33Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff4Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff7Tb4b4b4, Te6edf3pxTff7b72+T79c0ff4Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff4Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3signal Tff7b72> T79c0ff20Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff5Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff7Tb4b4b4, Te6edf3pxTff7b72+T79c0ff5Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff5Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3signal Tff7b72> T79c0ff7Tb4b4b4) Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTff7b72+T79c0ff6Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff7Tb4b4b4, Te6edf3pxTff7b72+T79c0ff6Tff7b72*T79c0ff2Tb4b4b4, Te6edf3pyTff7b72+T79c0ff6Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72#Tff7b72if MODEM == SX1280
Tff7b72#Tff7b72define WF_TX_SIZE 5
Tff7b72#Tff7b72else
Tff7b72#Tff7b72define WF_TX_SIZE 5
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72define WF_RSSI_MAX -60
Tff7b72#Tff7b72define WF_RSSI_MIN -135
Tff7b72#Tff7b72define WF_RSSI_SPAN (WF_RSSI_MAX-WF_RSSI_MIN)
Tff7b72#Tff7b72define WF_PIXEL_WIDTH 10
Tff7b72#Tff7b72define WF_M_RX 0x00
Tff7b72#Tff7b72define WF_M_TX 0x01
Tff7b72#Tff7b72define WF_M_NTFR 0x02
Tffa657void Te6edf3draw_waterfallTb4b4b4(Tffa657int Te6edf3pxTb4b4b4, Tffa657int Te6edf3pyTb4b4b4) Tb4b4b4{
Tffa657int Te6edf3rssi_val Tff7b72= Te6edf3current_rssiTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3rssi_val Tff7b72< Te6edf3WF_RSSI_MINTb4b4b4) Te6edf3rssi_val Tff7b72= Te6edf3WF_RSSI_MINTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3rssi_val Tff7b72> Te6edf3WF_RSSI_MAXTb4b4b4) Te6edf3rssi_val Tff7b72= Te6edf3WF_RSSI_MAXTb4b4b4;
Tffa657int Te6edf3rssi_normalised Tff7b72= Tb4b4b4(Tb4b4b4(Te6edf3rssi_val Tff7b72- Te6edf3WF_RSSI_MINTb4b4b4)Tff7b72*Tb4b4b4(T79c0ff1.0Tff7b72/Te6edf3WF_RSSI_SPANTb4b4b4)Tb4b4b4)Tff7b72*Te6edf3WF_PIXEL_WIDTHTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3display_txTb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tffa657uint8_t Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3WF_TX_SIZETb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Te6edf3waterfall_metaTb4b4b4[Te6edf3waterfall_headTb4b4b4] Tff7b72= Te6edf3WF_M_TXTb4b4b4;
Te6edf3waterfallTb4b4b4[Te6edf3waterfall_headTff7b72+Tff7b72+Tb4b4b4] Tff7b72= T79c0ff-1Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3waterfall_head Tff7b72>Tff7b72= Te6edf3WATERFALL_SIZETb4b4b4) Te6edf3waterfall_head Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Te6edf3display_tx Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3interference_detectedTb4b4b4) Tb4b4b4{ Te6edf3waterfall_metaTb4b4b4[Te6edf3waterfall_headTb4b4b4] Tff7b72= Te6edf3WF_M_NTFRTb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{ Te6edf3waterfall_metaTb4b4b4[Te6edf3waterfall_headTb4b4b4] Tff7b72= Te6edf3WF_M_RXTb4b4b4; Tb4b4b4}
Te6edf3waterfallTb4b4b4[Te6edf3waterfall_headTff7b72+Tff7b72+Tb4b4b4] Tff7b72= Te6edf3rssi_normalisedTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3waterfall_head Tff7b72>Tff7b72= Te6edf3WATERFALL_SIZETb4b4b4) Te6edf3waterfall_head Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}

Te6edf3stat_areaTb4b4b4.Te6edf3fillRectTb4b4b4(Te6edf3pxTb4b4b4,Te6edf3pyTb4b4b4,Te6edf3WF_PIXEL_WIDTHTb4b4b4, Te6edf3WATERFALL_SIZETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3WATERFALL_SIZETb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4)Tb4b4b4{
Tffa657int Te6edf3wi Tff7b72= Tb4b4b4(Te6edf3waterfall_headTff7b72+Te6edf3iTb4b4b4)Tff7b72%Te6edf3WATERFALL_SIZETb4b4b4;
Tffa657int Te6edf3ws Tff7b72= Te6edf3waterfallTb4b4b4[Te6edf3wiTb4b4b4]Tb4b4b4;
Tffa657int Te6edf3wm Tff7b72= Te6edf3waterfall_metaTb4b4b4[Te6edf3wiTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3ws Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3wm Tff7b72=Tff7b72= Te6edf3WF_M_RXTb4b4b4) Tb4b4b4{ Te6edf3stat_areaTb4b4b4.Te6edf3drawLineTb4b4b4(Te6edf3pxTb4b4b4, Te6edf3pyTff7b72+Te6edf3iTb4b4b4, Te6edf3pxTff7b72+Te6edf3wsT79c0ff-1Tb4b4b4, Te6edf3pyTff7b72+Te6edf3iTb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3wm Tff7b72=Tff7b72= Te6edf3WF_M_NTFRTb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3o Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657uint8_t Te6edf3ti Tff7b72= T79c0ff0Tb4b4b4; Te6edf3ti Tff7b72< Te6edf3WF_PIXEL_WIDTHTff7b72/T79c0ff2Tb4b4b4; Te6edf3tiTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{ Te6edf3stat_areaTb4b4b4.Te6edf3drawPixelTb4b4b4(Te6edf3pxTff7b72+Te6edf3tiTff7b72*T79c0ff2Tff7b72+Te6edf3oTb4b4b4, Te6edf3pyTff7b72+Te6edf3iTb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4; Tb4b4b4}
Tb4b4b4}
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3ws Tff7b72=Tff7b72= T79c0ff-1Tb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3o Tff7b72= Te6edf3iTff7b72%T79c0ff2Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657uint8_t Te6edf3ti Tff7b72= T79c0ff0Tb4b4b4; Te6edf3ti Tff7b72< Te6edf3WF_PIXEL_WIDTHTff7b72/T79c0ff2Tb4b4b4; Te6edf3tiTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3drawPixelTb4b4b4(Te6edf3pxTff7b72+Te6edf3tiTff7b72*T79c0ff2Tff7b72+Te6edf3oTb4b4b4, Te6edf3pyTff7b72+Te6edf3iTb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tffa657bool Te6edf3stat_area_intialised Tff7b72= Tffa657falseTb4b4b4;
Tffa657void Te6edf3draw_stat_areaTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3device_init_doneTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3stat_area_intialisedTb4b4b4) Tb4b4b4{
Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3bm_frameTb4b4b4, T79c0ff64Tb4b4b4, T79c0ff64Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Te6edf3stat_area_intialised Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}

Te6edf3draw_cable_iconTb4b4b4(T79c0ff3Tb4b4b4, T79c0ff8Tb4b4b4)Tb4b4b4;
Te6edf3draw_bt_iconTb4b4b4(T79c0ff3Tb4b4b4, T79c0ff30Tb4b4b4)Tb4b4b4;
Te6edf3draw_lora_iconTb4b4b4(T79c0ff45Tb4b4b4, T79c0ff8Tb4b4b4)Tb4b4b4;
Te6edf3draw_mw_iconTb4b4b4(T79c0ff45Tb4b4b4, T79c0ff30Tb4b4b4)Tb4b4b4;
Te6edf3draw_battery_barsTb4b4b4(T79c0ff4Tb4b4b4, T79c0ff58Tb4b4b4)Tb4b4b4;
Te6edf3draw_quality_barsTb4b4b4(T79c0ff28Tb4b4b4, T79c0ff56Tb4b4b4)Tb4b4b4;
Te6edf3draw_signal_barsTb4b4b4(T79c0ff44Tb4b4b4, T79c0ff56Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3radio_onlineTb4b4b4) Tb4b4b4{
Te6edf3draw_waterfallTb4b4b4(T79c0ff27Tb4b4b4, T79c0ff4Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tffa657void Te6edf3update_stat_areaTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3eeprom_ok Tff7b72&Tff7b72& Tff7b72!Te6edf3firmware_update_mode Tff7b72&Tff7b72& Tff7b72!Te6edf3console_activeTb4b4b4) Tb4b4b4{

Te6edf3draw_stat_areaTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3disp_mode Tff7b72=Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4) Tb4b4b4{
Te6edf3drawBitmapTb4b4b4(Te6edf3p_as_xTb4b4b4, Te6edf3p_as_yTb4b4b4, Te6edf3stat_areaTb4b4b4.Te6edf3getBufferTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stat_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stat_areaTb4b4b4.Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3disp_mode Tff7b72=Tff7b72= Te6edf3DISP_MODE_LANDSCAPETb4b4b4) Tb4b4b4{
Te6edf3drawBitmapTb4b4b4(Te6edf3p_as_xTff7b72+T79c0ff2Tb4b4b4, Te6edf3p_as_yTb4b4b4, Te6edf3stat_areaTb4b4b4.Te6edf3getBufferTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stat_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stat_areaTb4b4b4.Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3device_init_done Tff7b72&Tff7b72& Tff7b72!Te6edf3disp_ext_fbTb4b4b4) Te6edf3drawLineTb4b4b4(Te6edf3p_as_xTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3p_as_xTb4b4b4, T79c0ff64Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tb4b4b4}

Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3firmware_update_modeTb4b4b4) Tb4b4b4{
Te6edf3drawBitmapTb4b4b4(Te6edf3p_as_xTb4b4b4, Te6edf3p_as_yTb4b4b4, Te6edf3bm_updatingTb4b4b4, Te6edf3stat_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stat_areaTb4b4b4.Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3console_active Tff7b72&Tff7b72& Te6edf3device_init_doneTb4b4b4) Tb4b4b4{
Te6edf3drawBitmapTb4b4b4(Te6edf3p_as_xTb4b4b4, Te6edf3p_as_yTb4b4b4, Te6edf3bm_consoleTb4b4b4, Te6edf3stat_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stat_areaTb4b4b4.Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3disp_mode Tff7b72=Tff7b72= Te6edf3DISP_MODE_LANDSCAPETb4b4b4) Tb4b4b4{
Te6edf3drawLineTb4b4b4(Te6edf3p_as_xTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3p_as_xTb4b4b4, T79c0ff64Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72#Tff7b72define START_PAGE 0
Tff7b72const Tffa657uint8_t Te6edf3pages Tff7b72= T79c0ff3Tb4b4b4;
Tffa657uint8_t Te6edf3disp_page Tff7b72= Te6edf3START_PAGETb4b4b4;
Tff7b72extern Tffa657char Te6edf3bt_devnameTb4b4b4[T79c0ff11Tb4b4b4]Tb4b4b4;
Tff7b72extern Tffa657char Te6edf3bt_dhTb4b4b4[T79c0ff16Tb4b4b4]Tb4b4b4;
Tff7b72#Tff7b72if HAS_WIFI
Tff7b72extern Te6edf3IPAddress Te6edf3wr_device_ipTb4b4b4;
Tff7b72#Tff7b72endif
Tffa657void Te6edf3draw_disp_areaTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3device_init_done Tff7b72|Tff7b72| Te6edf3firmware_update_modeTb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3p_by Tff7b72= T79c0ff37Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3disp_mode Tff7b72=Tff7b72= Te6edf3DISP_MODE_LANDSCAPE Tff7b72|Tff7b72| Te6edf3firmware_update_modeTb4b4b4) Tb4b4b4{
Te6edf3p_by Tff7b72= T79c0ff18Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3fillRectTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3device_init_doneTb4b4b4) Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3p_byTb4b4b4, Te6edf3bm_bootTb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff27Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3firmware_update_modeTb4b4b4) Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3p_byTb4b4b4, Te6edf3bm_fw_updateTb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff27Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3disp_ext_fb Te6edf3or Te6edf3bt_ssp_pin Tff7b72!Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3radio_online Tff7b72&Tff7b72& Te6edf3display_diagnosticsTb4b4b4) Tb4b4b4{
Te6edf3disp_areaTb4b4b4.Te6edf3fillRectTb4b4b4(T79c0ff0Tb4b4b4,T79c0ff8Tb4b4b4,Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4,T79c0ff37Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4; Te6edf3disp_areaTb4b4b4.Te6edf3fillRectTb4b4b4(T79c0ff0Tb4b4b4,T79c0ff37Tb4b4b4,Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4,T79c0ff27Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3setFontTb4b4b4(Te6edf3SMALL_FONTTb4b4b4)Tb4b4b4; Te6edf3disp_areaTb4b4b4.Te6edf3setTextWrapTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4; Te6edf3disp_areaTb4b4b4.Te6edf3setTextColorTb4b4b4(Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4; Te6edf3disp_areaTb4b4b4.Te6edf3setTextSizeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;

Te6edf3disp_areaTb4b4b4.Te6edf3setCursorTb4b4b4(T79c0ff2Tb4b4b4, T79c0ff13Tb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffOnTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3setCursorTb4b4b4(T79c0ff14Tb4b4b4, T79c0ff13Tb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ff@Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3setCursorTb4b4b4(T79c0ff21Tb4b4b4, T79c0ff13Tb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3printfTb4b4b4(Ta5d6ff"Ta5d6ff%.1fKbpsTa5d6ff"Tb4b4b4, Tb4b4b4(Tffa657floatTb4b4b4)Te6edf3lora_bitrateTff7b72/T79c0ff1000.0Tb4b4b4)Tb4b4b4;

T8b949e//disp_area.setCursor(31, 23-1);
Te6edf3disp_areaTb4b4b4.Te6edf3setCursorTb4b4b4(T79c0ff2Tb4b4b4, T79c0ff23T79c0ff-1Tb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffAirtime:Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3setCursorTb4b4b4(T79c0ff11Tb4b4b4, T79c0ff33T79c0ff-1Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3total_channel_util Tff7b72< T79c0ff0.099Tb4b4b4) Tb4b4b4{
T8b949e//disp_area.printf("%.1f%%", total_channel_util*100.0);
Te6edf3disp_areaTb4b4b4.Te6edf3printfTb4b4b4(Ta5d6ff"Ta5d6ff%.1f%%Ta5d6ff"Tb4b4b4, Te6edf3airtimeTff7b72*T79c0ff100.0Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
T8b949e//disp_area.printf("%.0f%%", total_channel_util*100.0);
Te6edf3disp_areaTb4b4b4.Te6edf3printfTb4b4b4(Ta5d6ff"Ta5d6ff%.0f%%Ta5d6ff"Tb4b4b4, Te6edf3airtimeTff7b72*T79c0ff100.0Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff2Tb4b4b4, T79c0ff26T79c0ff-1Tb4b4b4, Te6edf3bm_hg_lowTb4b4b4, T79c0ff5Tb4b4b4, T79c0ff9Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;

Te6edf3disp_areaTb4b4b4.Te6edf3setCursorTb4b4b4(T79c0ff32Tff7b72+T79c0ff11Tb4b4b4, T79c0ff33T79c0ff-1Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3longterm_channel_util Tff7b72< T79c0ff0.099Tb4b4b4) Tb4b4b4{
T8b949e//disp_area.printf("%.1f%%", longterm_channel_util*100.0);
Te6edf3disp_areaTb4b4b4.Te6edf3printfTb4b4b4(Ta5d6ff"Ta5d6ff%.1f%%Ta5d6ff"Tb4b4b4, Te6edf3longterm_airtimeTff7b72*T79c0ff100.0Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
T8b949e//disp_area.printf("%.0f%%", longterm_channel_util*100.0);
Te6edf3disp_areaTb4b4b4.Te6edf3printfTb4b4b4(Ta5d6ff"Ta5d6ff%.0f%%Ta5d6ff"Tb4b4b4, Te6edf3longterm_airtimeTff7b72*T79c0ff100.0Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff32Tff7b72+T79c0ff2Tb4b4b4, T79c0ff26T79c0ff-1Tb4b4b4, Te6edf3bm_hg_highTb4b4b4, T79c0ff5Tb4b4b4, T79c0ff9Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;


Te6edf3disp_areaTb4b4b4.Te6edf3setTextColorTb4b4b4(Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3setCursorTb4b4b4(T79c0ff2Tb4b4b4, T79c0ff46Tb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffChannelTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3setCursorTb4b4b4(T79c0ff38Tb4b4b4, T79c0ff46Tb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffLoad:Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3setCursorTb4b4b4(T79c0ff11Tb4b4b4, T79c0ff57Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3total_channel_util Tff7b72< T79c0ff0.099Tb4b4b4) Tb4b4b4{
T8b949e//disp_area.printf("%.1f%%", airtime*100.0);
Te6edf3disp_areaTb4b4b4.Te6edf3printfTb4b4b4(Ta5d6ff"Ta5d6ff%.1f%%Ta5d6ff"Tb4b4b4, Te6edf3total_channel_utilTff7b72*T79c0ff100.0Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
T8b949e//disp_area.printf("%.0f%%", airtime*100.0);
Te6edf3disp_areaTb4b4b4.Te6edf3printfTb4b4b4(Ta5d6ff"Ta5d6ff%.0f%%Ta5d6ff"Tb4b4b4, Te6edf3total_channel_utilTff7b72*T79c0ff100.0Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff2Tb4b4b4, T79c0ff50Tb4b4b4, Te6edf3bm_hg_lowTb4b4b4, T79c0ff5Tb4b4b4, T79c0ff9Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;

Te6edf3disp_areaTb4b4b4.Te6edf3setCursorTb4b4b4(T79c0ff32Tff7b72+T79c0ff11Tb4b4b4, T79c0ff57Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3longterm_channel_util Tff7b72< T79c0ff0.099Tb4b4b4) Tb4b4b4{
T8b949e//disp_area.printf("%.1f%%", longterm_airtime*100.0);
Te6edf3disp_areaTb4b4b4.Te6edf3printfTb4b4b4(Ta5d6ff"Ta5d6ff%.1f%%Ta5d6ff"Tb4b4b4, Te6edf3longterm_channel_utilTff7b72*T79c0ff100.0Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
T8b949e//disp_area.printf("%.0f%%", longterm_airtime*100.0);
Te6edf3disp_areaTb4b4b4.Te6edf3printfTb4b4b4(Ta5d6ff"Ta5d6ff%.0f%%Ta5d6ff"Tb4b4b4, Te6edf3longterm_channel_utilTff7b72*T79c0ff100.0Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff32Tff7b72+T79c0ff2Tb4b4b4, T79c0ff50Tb4b4b4, Te6edf3bm_hg_highTb4b4b4, T79c0ff5Tb4b4b4, T79c0ff9Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;

Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3device_signatures_okTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{ Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3bm_def_lcTb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff23Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{ Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3bm_defTb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff23Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4; Tb4b4b4}

Tffa657bool Te6edf3display_ip Tff7b72= Tffa657falseTb4b4b4;
Tff7b72#Tff7b72if HAS_WIFI
Tff7b72if Tb4b4b4(Te6edf3wifi_is_connectedTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Te6edf3disp_pageTff7b72%T79c0ff2 Tff7b72=Tff7b72= T79c0ff1Tb4b4b4) Tb4b4b4{ Te6edf3display_ip Tff7b72= Tffa657trueTb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72endif
Tff7b72if Tb4b4b4(Te6edf3display_ipTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if HAS_WIFI
Tffa657uint8_t Te6edf3ones Tff7b72= T79c0ff3Tff7b72+Te6edf3one_countsTb4b4b4[Te6edf3wr_device_ipTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4]Tff7b72+Te6edf3one_countsTb4b4b4[Te6edf3wr_device_ipTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4]Tff7b72+Te6edf3one_countsTb4b4b4[Te6edf3wr_device_ipTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4]Tff7b72+Te6edf3one_countsTb4b4b4[Te6edf3wr_device_ipTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4]Tb4b4b4;
Tffa657uint8_t Te6edf3chars Tff7b72= T79c0ff7Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657uint8_t Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3iTff7b72<T79c0ff4Tb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{ Tff7b72if Tb4b4b4(Te6edf3wr_device_ipTb4b4b4[Te6edf3iTb4b4b4] Tff7b72> T79c0ff9Tb4b4b4) Tb4b4b4{ Te6edf3charsTff7b72+Tff7b72+Tb4b4b4; Tb4b4b4} Tff7b72if Tb4b4b4(Te6edf3wr_device_ipTb4b4b4[Te6edf3iTb4b4b4] Tff7b72> T79c0ff99Tb4b4b4) Tb4b4b4{ Te6edf3charsTff7b72+Tff7b72+Tb4b4b4; Tb4b4b4} Tb4b4b4}
Tffa657uint8_t Te6edf3width Tff7b72= Te6edf3charsTff7b72*T79c0ff6Tff7b72-Tb4b4b4(Te6edf3onesTff7b72*T79c0ff4Tb4b4b4)Tb4b4b4;
Tffa657int Te6edf3alignment_offset Tff7b72= Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3widthTb4b4b4;
Tffa657int Te6edf3ipxpos Tff7b72= Te6edf3alignment_offsetTb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3setFontTb4b4b4(Te6edf3SMALL_FONTTb4b4b4)Tb4b4b4; Te6edf3disp_areaTb4b4b4.Te6edf3setTextWrapTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4; Te6edf3disp_areaTb4b4b4.Te6edf3setTextColorTb4b4b4(Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4; Te6edf3disp_areaTb4b4b4.Te6edf3setTextSizeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3fillRectTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff20Tb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff17Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3setCursorTb4b4b4(T79c0ff3Tb4b4b4, T79c0ff34T79c0ff-8Tb4b4b4)Tb4b4b4; Te6edf3disp_areaTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffWiFi IP:Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3setCursorTb4b4b4(Te6edf3ipxposTb4b4b4, T79c0ff34Tb4b4b4)Tb4b4b4; Te6edf3disp_areaTb4b4b4.Te6edf3printTb4b4b4(Te6edf3wr_device_ipTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3disp_areaTb4b4b4.Te6edf3setFontTb4b4b4(Te6edf3SMALL_FONTTb4b4b4)Tb4b4b4; Te6edf3disp_areaTb4b4b4.Te6edf3setTextWrapTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4; Te6edf3disp_areaTb4b4b4.Te6edf3setTextColorTb4b4b4(Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4; Te6edf3disp_areaTb4b4b4.Te6edf3setTextSizeTb4b4b4(T79c0ff2Tb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3fillRectTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff20Tb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff17Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4; Tffa657uint8_t Te6edf3ofsc Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3bt_dhTb4b4b4[T79c0ff14Tb4b4b4] Tff7b72& T79c0ff0b00001111Tb4b4b4) Tff7b72=Tff7b72= T79c0ff0x01Tb4b4b4) Tb4b4b4{ Te6edf3ofsc Tff7b72+Tff7b72= T79c0ff8Tb4b4b4; Tb4b4b4}
Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3bt_dhTb4b4b4[T79c0ff14Tb4b4b4] Tff7b72>Tff7b72> T79c0ff4Tb4b4b4) Tff7b72=Tff7b72= T79c0ff0x01Tb4b4b4) Tb4b4b4{ Te6edf3ofsc Tff7b72+Tff7b72= T79c0ff8Tb4b4b4; Tb4b4b4}
Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3bt_dhTb4b4b4[T79c0ff15Tb4b4b4] Tff7b72& T79c0ff0b00001111Tb4b4b4) Tff7b72=Tff7b72= T79c0ff0x01Tb4b4b4) Tb4b4b4{ Te6edf3ofsc Tff7b72+Tff7b72= T79c0ff8Tb4b4b4; Tb4b4b4}
Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3bt_dhTb4b4b4[T79c0ff15Tb4b4b4] Tff7b72>Tff7b72> T79c0ff4Tb4b4b4) Tff7b72=Tff7b72= T79c0ff0x01Tb4b4b4) Tb4b4b4{ Te6edf3ofsc Tff7b72+Tff7b72= T79c0ff8Tb4b4b4; Tb4b4b4}
Te6edf3disp_areaTb4b4b4.Te6edf3setCursorTb4b4b4(T79c0ff17Tff7b72+Te6edf3ofscTb4b4b4, T79c0ff32Tb4b4b4)Tb4b4b4; Te6edf3disp_areaTb4b4b4.Te6edf3printfTb4b4b4(Ta5d6ff"Ta5d6ff%02X%02XTa5d6ff"Tb4b4b4, Te6edf3bt_dhTb4b4b4[T79c0ff14Tb4b4b4]Tb4b4b4, Te6edf3bt_dhTb4b4b4[T79c0ff15Tb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hw_ready Tff7b72|Tff7b72| Te6edf3radio_error Tff7b72|Tff7b72| Tff7b72!Te6edf3device_firmware_okTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3device_firmware_okTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff37Tb4b4b4, Te6edf3bm_fw_corruptTb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff27Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3modem_installedTb4b4b4) Tb4b4b4{
Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff37Tb4b4b4, Te6edf3bm_no_radioTb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff27Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff37Tb4b4b4, Te6edf3bm_conf_missingTb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff27Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3bt_state Tff7b72=Tff7b72= Te6edf3BT_STATE_PAIRING Te6edf3and Te6edf3bt_ssp_pin Tff7b72!Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Tffa657char Tff7b72*Te6edf3pin_str Tff7b72= Tb4b4b4(Tffa657charTff7b72*Tb4b4b4)Te6edf3mallocTb4b4b4(Te6edf3DISP_PIN_SIZETff7b72+T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3sprintfTb4b4b4(Te6edf3pin_strTb4b4b4, Ta5d6ff"Ta5d6ff%06dTa5d6ff"Tb4b4b4, Te6edf3bt_ssp_pinTb4b4b4)Tb4b4b4;

Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff37Tb4b4b4, Te6edf3bm_pairingTb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff27Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3DISP_PIN_SIZETb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3numeric Tff7b72= Te6edf3pin_strTb4b4b4[Te6edf3iTb4b4b4]T79c0ff-48Tb4b4b4;
Tffa657uint8_t Te6edf3offset Tff7b72= Te6edf3numericTff7b72*T79c0ff5Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff7Tff7b72+T79c0ff9Tff7b72*Te6edf3iTb4b4b4, T79c0ff37Tff7b72+T79c0ff16Tb4b4b4, Te6edf3bm_n_uhTff7b72+Te6edf3offsetTb4b4b4, T79c0ff8Tb4b4b4, T79c0ff5Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3freeTb4b4b4(Te6edf3pin_strTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3millisTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3last_page_flip Tff7b72>Tff7b72= Te6edf3page_intervalTb4b4b4) Tb4b4b4{
Te6edf3disp_page Tff7b72= Tb4b4b4(Tff7b72+Tff7b72+Te6edf3disp_pageTff7b72%Te6edf3pagesTb4b4b4)Tb4b4b4;
Te6edf3last_page_flip Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3not Te6edf3community_fw Te6edf3and Te6edf3disp_page Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Te6edf3disp_page Tff7b72= T79c0ff1Tb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3radio_onlineTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3display_diagnosticsTb4b4b4) Tb4b4b4{
Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff37Tb4b4b4, Te6edf3bm_onlineTb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff27Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3disp_page Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tffa657true Tff7b72|Tff7b72| Te6edf3device_signatures_okTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff37Tb4b4b4, Te6edf3bm_checksTb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff27Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff37Tb4b4b4, Te6edf3bm_nfrTb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff27Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3disp_page Tff7b72=Tff7b72= T79c0ff1Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3console_activeTb4b4b4) Tb4b4b4{
Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff37Tb4b4b4, Te6edf3bm_hwokTb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff27Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff37Tb4b4b4, Te6edf3bm_console_activeTb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff27Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3disp_page Tff7b72=Tff7b72= T79c0ff2Tb4b4b4) Tb4b4b4{
Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff37Tb4b4b4, Te6edf3bm_versionTb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff27Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tffa657char Tff7b72*Te6edf3v_str Tff7b72= Tb4b4b4(Tffa657charTff7b72*Tb4b4b4)Te6edf3mallocTb4b4b4(T79c0ff3Tff7b72+T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3sprintfTb4b4b4(Te6edf3v_strTb4b4b4, Ta5d6ff"Ta5d6ff%01d%02dTa5d6ff"Tb4b4b4, Te6edf3MAJ_VERSTb4b4b4, Te6edf3MIN_VERSTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< T79c0ff3Tb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3numeric Tff7b72= Te6edf3v_strTb4b4b4[Te6edf3iTb4b4b4]T79c0ff-48Tb4b4b4; Tffa657uint8_t Te6edf3bm_offset Tff7b72= Te6edf3numericTff7b72*T79c0ff5Tb4b4b4;
Tffa657uint8_t Te6edf3dxp Tff7b72= T79c0ff20Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3i Tff7b72=Tff7b72= T79c0ff1Tb4b4b4) Te6edf3dxp Tff7b72+Tff7b72= T79c0ff9Tff7b72*T79c0ff1Tff7b72+T79c0ff4Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3i Tff7b72=Tff7b72= T79c0ff2Tb4b4b4) Te6edf3dxp Tff7b72+Tff7b72= T79c0ff9Tff7b72*T79c0ff2Tff7b72+T79c0ff4Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(Te6edf3dxpTb4b4b4, T79c0ff37Tff7b72+T79c0ff16Tb4b4b4, Te6edf3bm_n_uhTff7b72+Te6edf3bm_offsetTb4b4b4, T79c0ff8Tb4b4b4, T79c0ff5Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3freeTb4b4b4(Te6edf3v_strTb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3drawLineTb4b4b4(T79c0ff27Tb4b4b4, T79c0ff37Tff7b72+T79c0ff19Tb4b4b4, T79c0ff28Tb4b4b4, T79c0ff37Tff7b72+T79c0ff19Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3drawLineTb4b4b4(T79c0ff27Tb4b4b4, T79c0ff37Tff7b72+T79c0ff20Tb4b4b4, T79c0ff28Tb4b4b4, T79c0ff37Tff7b72+T79c0ff20Tb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3fbTb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tffa657void Te6edf3update_disp_areaTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3draw_disp_areaTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3drawBitmapTb4b4b4(Te6edf3p_ad_xTb4b4b4, Te6edf3p_ad_yTb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3getBufferTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3disp_mode Tff7b72=Tff7b72= Te6edf3DISP_MODE_LANDSCAPETb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3device_init_done Tff7b72&Tff7b72& Tff7b72!Te6edf3firmware_update_mode Tff7b72&Tff7b72& Tff7b72!Te6edf3disp_ext_fbTb4b4b4) Tb4b4b4{
Te6edf3drawLineTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff63Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tffa657void Te6edf3display_reconditionTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if PLATFORM == PLATFORM_ESP32
Tff7b72for Tb4b4b4(Tffa657uint8_t Te6edf3iy Tff7b72= T79c0ff0Tb4b4b4; Te6edf3iy Tff7b72< Te6edf3disp_areaTb4b4b4.Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4; Te6edf3iyTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tffa657unsigned Tffa657char Te6edf3rand_seg Tb4b4b4[Tb4b4b4] Tff7b72= Tb4b4b4{Te6edf3randomTb4b4b4(T79c0ff0xFFTb4b4b4)Tb4b4b4,Te6edf3randomTb4b4b4(T79c0ff0xFFTb4b4b4)Tb4b4b4,Te6edf3randomTb4b4b4(T79c0ff0xFFTb4b4b4)Tb4b4b4,Te6edf3randomTb4b4b4(T79c0ff0xFFTb4b4b4)Tb4b4b4,Te6edf3randomTb4b4b4(T79c0ff0xFFTb4b4b4)Tb4b4b4,Te6edf3randomTb4b4b4(T79c0ff0xFFTb4b4b4)Tb4b4b4,Te6edf3randomTb4b4b4(T79c0ff0xFFTb4b4b4)Tb4b4b4,Te6edf3randomTb4b4b4(T79c0ff0xFFTb4b4b4)Tb4b4b4}Tb4b4b4;
Te6edf3stat_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3iyTb4b4b4, Te6edf3rand_segTb4b4b4, T79c0ff64Tb4b4b4, T79c0ff1Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Te6edf3disp_areaTb4b4b4.Te6edf3drawBitmapTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3iyTb4b4b4, Te6edf3rand_segTb4b4b4, T79c0ff64Tb4b4b4, T79c0ff1Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3drawBitmapTb4b4b4(Te6edf3p_ad_xTb4b4b4, Te6edf3p_ad_yTb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3getBufferTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3disp_areaTb4b4b4.Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3disp_mode Tff7b72=Tff7b72= Te6edf3DISP_MODE_PORTRAITTb4b4b4) Tb4b4b4{
Te6edf3drawBitmapTb4b4b4(Te6edf3p_as_xTb4b4b4, Te6edf3p_as_yTb4b4b4, Te6edf3stat_areaTb4b4b4.Te6edf3getBufferTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stat_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stat_areaTb4b4b4.Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3disp_mode Tff7b72=Tff7b72= Te6edf3DISP_MODE_LANDSCAPETb4b4b4) Tb4b4b4{
Te6edf3drawBitmapTb4b4b4(Te6edf3p_as_xTb4b4b4, Te6edf3p_as_yTb4b4b4, Te6edf3stat_areaTb4b4b4.Te6edf3getBufferTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stat_areaTb4b4b4.Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stat_areaTb4b4b4.Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3SSD1306_WHITETb4b4b4, Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif
Tb4b4b4}

Tffa657bool Te6edf3epd_blanked Tff7b72= Tffa657falseTb4b4b4;
Tff7b72#Tff7b72if BOARD_MODEL == BOARD_TECHO
Tffa657void Te6edf3epd_blankTb4b4b4(Tffa657bool Te6edf3full_update Tff7b72= Tffa657trueTb4b4b4) Tb4b4b4{
Te6edf3displayTb4b4b4.Te6edf3setFullWindowTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3fillScreenTb4b4b4(Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3displayTb4b4b4(Te6edf3full_updateTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3epd_blackTb4b4b4(Tffa657bool Te6edf3full_update Tff7b72= Tffa657trueTb4b4b4) Tb4b4b4{
Te6edf3displayTb4b4b4.Te6edf3setFullWindowTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3fillScreenTb4b4b4(Te6edf3SSD1306_BLACKTb4b4b4)Tb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3displayTb4b4b4(Te6edf3full_updateTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif

Tffa657void Te6edf3update_displayTb4b4b4(Tffa657bool Te6edf3blank Tff7b72= Tffa657falseTb4b4b4) Tb4b4b4{
Te6edf3display_updating Tff7b72= Tffa657trueTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3blank Tff7b72=Tff7b72= Tffa657trueTb4b4b4) Tb4b4b4{
Te6edf3last_disp_update Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3disp_update_intervalT79c0ff-1Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3display_blanking_enabled Tff7b72&Tff7b72& Te6edf3millisTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3last_unblank_event Tff7b72>Tff7b72= Te6edf3display_blanking_timeoutTb4b4b4) Tb4b4b4{
Te6edf3blank Tff7b72= Tffa657trueTb4b4b4;
Te6edf3display_blanked Tff7b72= Tffa657trueTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3display_intensity Tff7b72!Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3display_unblank_intensity Tff7b72= Te6edf3display_intensityTb4b4b4;
Tb4b4b4}
Te6edf3display_intensity Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3display_blanked Tff7b72= Tffa657falseTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3display_unblank_intensity Tff7b72!Tff7b72= T79c0ff0x00Tb4b4b4) Tb4b4b4{
Te6edf3display_intensity Tff7b72= Te6edf3display_unblank_intensityTb4b4b4;
Te6edf3display_unblank_intensity Tff7b72= T79c0ff0x00Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3blankTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3millisTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3last_disp_update Tff7b72>Tff7b72= Te6edf3disp_update_intervalTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3display_contrast Tff7b72!Tff7b72= Te6edf3display_intensityTb4b4b4) Tb4b4b4{
Te6edf3display_contrast Tff7b72= Te6edf3display_intensityTb4b4b4;
Te6edf3set_contrastTb4b4b4(Tff7b72&Te6edf3displayTb4b4b4, Te6edf3display_contrastTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72#Tff7b72if BOARD_MODEL == BOARD_TECHO
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3epd_blankedTb4b4b4) Tb4b4b4{
Te6edf3epd_blankTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3epd_blanked Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif

Tff7b72#Tff7b72if BOARD_MODEL == BOARD_HELTEC_T114
Te6edf3displayTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3displayTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3digitalWriteTb4b4b4(Te6edf3PIN_T114_TFT_BLGTTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL != BOARD_TDECK && BOARD_MODEL != BOARD_TECHO
Te6edf3displayTb4b4b4.Te6edf3clearDisplayTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3displayTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72else
T8b949e// TODO: Clear screen
Tff7b72#Tff7b72endif

Te6edf3last_disp_update Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3millisTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3last_disp_update Tff7b72>Tff7b72= Te6edf3disp_update_intervalTb4b4b4) Tb4b4b4{
Tffa657uint32_t Te6edf3current Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3display_contrast Tff7b72!Tff7b72= Te6edf3display_intensityTb4b4b4) Tb4b4b4{
Te6edf3display_contrast Tff7b72= Te6edf3display_intensityTb4b4b4;
Te6edf3set_contrastTb4b4b4(Tff7b72&Te6edf3displayTb4b4b4, Te6edf3display_contrastTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72#Tff7b72if BOARD_MODEL == BOARD_HELTEC_T114
Te6edf3displayTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3digitalWriteTb4b4b4(Te6edf3PIN_T114_TFT_BLGTTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif BOARD_MODEL != BOARD_TDECK && BOARD_MODEL != BOARD_TECHO
Te6edf3displayTb4b4b4.Te6edf3clearDisplayTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif

Tff7b72if Tb4b4b4(Te6edf3recondition_displayTb4b4b4) Tb4b4b4{
Te6edf3disp_target_fps Tff7b72= T79c0ff30Tb4b4b4;
Te6edf3disp_update_interval Tff7b72= T79c0ff1000Tff7b72/Te6edf3disp_target_fpsTb4b4b4;
Te6edf3display_reconditionTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72#Tff7b72if BOARD_MODEL == BOARD_TECHO
Te6edf3displayTb4b4b4.Te6edf3setFullWindowTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3fillScreenTb4b4b4(Te6edf3SSD1306_WHITETb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif

Te6edf3update_stat_areaTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3update_disp_areaTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72if BOARD_MODEL == BOARD_TECHO
Tff7b72if Tb4b4b4(Te6edf3currentTff7b72-Te6edf3last_epd_refresh Tff7b72>Tff7b72= Te6edf3epd_update_intervalTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3currentTff7b72-Te6edf3last_epd_full_refresh Tff7b72>Tff7b72= Te6edf3REFRESH_PERIODTb4b4b4) Tb4b4b4{ Te6edf3displayTb4b4b4.Te6edf3displayTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4; Te6edf3last_epd_full_refresh Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{ Te6edf3displayTb4b4b4.Te6edf3displayTb4b4b4(Tffa657trueTb4b4b4)Tb4b4b4; Tb4b4b4}
Te6edf3last_epd_refresh Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3epd_blanked Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72elif BOARD_MODEL != BOARD_TDECK
Te6edf3displayTb4b4b4.Te6edf3displayTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif

Te6edf3last_disp_update Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Te6edf3display_updating Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3display_unblankTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3last_unblank_event Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3ext_fb_enableTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3disp_ext_fb Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3ext_fb_disableTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3disp_ext_fb Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────